package com.itheima.Controller;

import cn.hutool.core.bean.BeanUtil;
import com.itheima.DTO.StudentDTO;
import com.itheima.pojo.PageResult;
import com.itheima.pojo.Result;
import com.itheima.pojo.Student;
import com.itheima.pojo.StudentQueryParam;
import com.itheima.service.StudentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;


@RestController
@Slf4j
@RequestMapping("/students")
public class StudentController {
    @Autowired
    private StudentService studentService;


    @GetMapping
    public Result list(StudentQueryParam studentQueryParam) {
        log.info("分页查询，参数：{}", studentQueryParam);
        PageResult pageResult = studentService.pageQuery(studentQueryParam);
        return Result.success(pageResult);
    }

    //该接口用于批量删除学员信息
    @DeleteMapping("/{ids}")
    /*
          弹出确认框 , 提示 "您确定要删除该学员的信息吗 ?"
          如果选择确定 , 则删除该用户 , 删除成功后 , 重新刷新列表页面。
          如果选择了 取消 ， 则不执行任何操作。
     */
    public Result delete(@PathVariable("ids") Integer[] ids) {
        log.info("批量删除学员信息，id：{}", ids);
        studentService.delete(ids);
        return Result.success();

    }

    //该接口用于添加学员信息
    @PostMapping
    public Result save(@RequestBody Student student) {
        log.info("新增学员信息：{}", student);

        studentService.MySave(student);
        return Result.success();
    }

    //    该接口用于根据主键ID查询学员的信息
    @GetMapping("/{id}")
    public Result getById(@PathVariable Integer id) {
        log.info("根据id查询学员信息：{}", id);
        Student student = studentService.getByIdInfo(id);
        return Result.success(student);
    }

    //该接口用于修改学员的数据信息 违纪处理
    @PutMapping("/violation/{id}/{score}")
    //score:扣除分数
    public Result update(@PathVariable Integer id, @PathVariable Integer score) {
        log.info("修改学员信息：{}", id);
//        1). 每一次违纪处理 , 就需要将违纪次数往上累加一次 。
//        2). 每一次违纪处理 , 需要将违纪分数累加。

        studentService.update(id, score);
        return Result.success();
    }

//    该接口用于修改学员的数据信息
    @PutMapping
    public Result update(@RequestBody Student student) {
        log.info("修改学员信息：{}", student);
        studentService.updateById(student);
        return Result.success();
    }

}
